/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DataTier;

import EntitiesTier.ClContratado;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Douglas
 */
public class ContratadoDAO {
    private Connection conn;
    
    public ContratadoDAO() throws SQLException{
        
        try{
            this.conn = ConnectionFactory.getConnection();
        }
        catch(Exception e){
            throw new RuntimeException(e.getMessage());
        }
    }
    
    public int incluir(ClContratado clContratado) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        if(clContratado == null)
            throw new RuntimeException("O valor passado não pode ser nulo");
        
        try{
            String SQL = "INSERT INTO contratado(CODO_TIPO, CODO_NOME, CODO_RAZAO, CODO_ENDERECO, CODO_NUM, CODO_CEP, " +
                "CODO_IBGE, CODO_TELEFONE, CODO_CONTATO, CODO_EMAIL, CODO_RESPONSAVEL, CODO_RGRESPONSAVEL, " +
                "CODO_CPFRESPONSAVEL, CODO_CNPJ, CODO_IE, CODO_BAIRRO, CODO_COMPLEMENTO) "
                    + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            conn = this.conn;
            ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
            ps.setInt(1, clContratado.getCODO_TIPO());
            ps.setString(2, clContratado.getCODO_NOME());
            ps.setString(3, clContratado.getCODO_RAZAO());
            ps.setString(4, clContratado.getCODO_ENDERECO());
            ps.setString(5, clContratado.getCODO_NUM());
            ps.setString(6, clContratado.getCODO_CEP());
            ps.setString(7, clContratado.getCODO_IBGE());
            ps.setString(8, clContratado.getCODO_TELEFONE());
            ps.setString(9, clContratado.getCODO_CONTATO());
            ps.setString(10, clContratado.getCODO_EMAIL());
            ps.setString(11, clContratado.getCODO_RESPONSAVEL());
            ps.setString(12, clContratado.getCODO_RGRESPONSAVEL());
            ps.setString(13, clContratado.getCODO_CPFRESPONSAVEL());
            ps.setString(14, clContratado.getCODO_CNPJ());
            ps.setString(15, clContratado.getCODO_IE());
            ps.setString(16, clContratado.getCODO_BAIRRO());
            ps.setString(17, clContratado.getCODO_COMPLEMENTO());
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            if(rs.next())
            { 
                clContratado.setCODO_COD(rs.getInt(1));
            }
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
            return(clContratado.getCODO_COD());
        }
    }
        
    public void atualizar(ClContratado clContratado) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(clContratado == null)
            throw new RuntimeException("O valor passado não pode ser nulo");

        try
        {
            String SQL = "UPDATE contratado SET CODO_TIPO  = ?, CODO_NOME  = ?, CODO_RAZAO  = ?, CODO_ENDERECO  = ?, "
                    + "CODO_NUM  = ?, CODO_CEP  = ?, CODO_IBGE  = ?, CODO_TELEFONE  = ?, CODO_CONTATO  = ?, "
                    + "CODO_EMAIL  = ?, CODO_RESPONSAVEL  = ?, CODO_RGRESPONSAVEL  = ?, " 
                    + "CODO_CPFRESPONSAVEL  = ?, CODO_CNPJ  = ?, CODO_IE  = ?, CODO_BAIRRO = ?, "
                    + "CODO_COMPLEMENTO = ? where CODO_COD = ?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, clContratado.getCODO_TIPO());
            ps.setString(2, clContratado.getCODO_NOME());
            ps.setString(3, clContratado.getCODO_RAZAO());
            ps.setString(4, clContratado.getCODO_ENDERECO());
            ps.setString(5, clContratado.getCODO_NUM());
            ps.setString(6, clContratado.getCODO_CEP());
            ps.setString(7, clContratado.getCODO_IBGE());
            ps.setString(8, clContratado.getCODO_TELEFONE());
            ps.setString(9, clContratado.getCODO_CONTATO());
            ps.setString(10, clContratado.getCODO_EMAIL());
            ps.setString(11, clContratado.getCODO_RESPONSAVEL());
            ps.setString(12, clContratado.getCODO_RGRESPONSAVEL());
            ps.setString(13, clContratado.getCODO_CPFRESPONSAVEL());
            ps.setString(14, clContratado.getCODO_CNPJ());
            ps.setString(15, clContratado.getCODO_IE());
            ps.setString(16, clContratado.getCODO_BAIRRO());
            ps.setString(17, clContratado.getCODO_COMPLEMENTO());
            ps.setInt(18, clContratado.getCODO_COD());
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
        
    }
    
    public List todos() throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contratado");
            rs = ps.executeQuery();
            List<ClContratado> lista = new ArrayList<ClContratado>();
            while(rs.next())
            {
                int codo_cod = rs.getInt("CODO_COD");
                int codo_tipo = rs.getInt("CODO_TIPO");
                String codo_nome = rs.getString("CODO_NOME");
                String codo_razao = rs.getString("CODO_RAZAO");
                String codo_endereco = rs.getString("CODO_ENDERECO");
                String codo_num = rs.getString("CODO_NUM");
                String codo_cep = rs.getString("CODO_CEP");
                String codo_ibge = rs.getString("CODO_IBGE");
                String codo_telefone = rs.getString("CODO_TELEFONE");
                String codo_contato = rs.getString("CODO_CONTATO");
                String codo_email = rs.getString("CODO_EMAIL");
                String codo_responsavel = rs.getString("CODO_RESPONSAVEL");
                String codo_rgresposavel = rs.getString("CODO_RGRESPONSAVEL");
                String codo_cpfresponsavel = rs.getString("CODO_CPFRESPONSAVEL");
                String codo_cnpj = rs.getString("CODO_CNPJ");
                String codo_ie = rs.getString("CODO_IE");
                String codo_bairro = rs.getString("CODO_BAIRRO");
                String codo_complemento = rs.getString("CODO_COMPLEMENTO");

                ClContratado clContratado = new ClContratado(codo_cod, codo_tipo,  codo_nome, codo_razao,
                codo_endereco,  codo_num, codo_cep, codo_ibge, codo_telefone, codo_contato, codo_email,
                codo_responsavel, codo_rgresposavel, codo_cpfresponsavel, codo_cnpj, codo_ie, codo_bairro, codo_complemento);

                lista.add(clContratado);
            }
            return lista;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public ClContratado procurar(int codo_cod) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contratado WHERE CODO_COD = ?");
            ps.setInt(1, codo_cod);
            rs = ps.executeQuery();
            if(!rs.next())
            {
                throw new Exception("Não foi encontrado nenhum "
                        + "registro com o ID: " + codo_cod);
            }
                int codo_tipo = rs.getInt("CODO_TIPO");
                String codo_nome = rs.getString("CODO_NOME");
                String codo_razao = rs.getString("CODO_RAZAO");
                String codo_endereco = rs.getString("CODO_ENDERECO");
                String codo_num = rs.getString("CODO_NUM");
                String codo_cep = rs.getString("CODO_CEP");
                String codo_ibge = rs.getString("CODO_IBGE");
                String codo_telefone = rs.getString("CODO_TELEFONE");
                String codo_contato = rs.getString("CODO_CONTATO");
                String codo_email = rs.getString("CODO_EMAIL");
                String codo_responsavel = rs.getString("CODO_RESPONSAVEL");
                String codo_rgresposavel = rs.getString("CODO_RGRESPONSAVEL");
                String codo_cpfresponsavel = rs.getString("CODO_CPFRESPONSAVEL");
                String codo_cnpj = rs.getString("CODO_CNPJ");
                String codo_ie = rs.getString("CODO_IE");
                String codo_bairro = rs.getString("CODO_BAIRRO");
                String codo_complemento = rs.getString("CODO_COMPLEMENTO");

            ClContratado clContratado = new ClContratado(codo_cod, codo_tipo,  codo_nome, codo_razao,
                codo_endereco,  codo_num, codo_cep, codo_ibge, codo_telefone, codo_contato, codo_email,
                codo_responsavel, codo_rgresposavel, codo_cpfresponsavel, codo_cnpj, codo_ie, codo_bairro, codo_complemento);

            return clContratado;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public List procurar(String codo_razao) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        List<ClContratado> lista = new ArrayList<ClContratado>();
        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contratado WHERE CODO_RAZAO LIKE ?");
            ps.setString(1, codo_razao);
            rs = ps.executeQuery();
            
            while(rs.next())
            {
            
                int codo_cod = rs.getInt("CODO_COD");
                int codo_tipo = rs.getInt("CODO_TIPO");
                String codo_nome = rs.getString("CODO_NOME");
                String codo_endereco = rs.getString("CODO_ENDERECO");
                String codo_num = rs.getString("CODO_NUM");
                String codo_cep = rs.getString("CODO_CEP");
                String codo_ibge = rs.getString("CODO_IBGE");
                String codo_telefone = rs.getString("CODO_TELEFONE");
                String codo_contato = rs.getString("CODO_CONTATO");
                String codo_email = rs.getString("CODO_EMAIL");
                String codo_responsavel = rs.getString("CODO_RESPONSAVEL");
                String codo_rgresposavel = rs.getString("CODO_RGRESPONSAVEL");
                String codo_cpfresponsavel = rs.getString("CODO_CPFRESPONSAVEL");
                String codo_cnpj = rs.getString("CODO_CNPJ");
                String codo_ie = rs.getString("CODO_IE");
                String codo_bairro = rs.getString("CODO_BAIRRO");
                String codo_complemento = rs.getString("CODO_COMPLEMENTO");

                ClContratado clContratado = new ClContratado(codo_cod, codo_tipo,  codo_nome, codo_razao,
                codo_endereco,  codo_num, codo_cep, codo_ibge, codo_telefone, codo_contato, codo_email,
                codo_responsavel, codo_rgresposavel, codo_cpfresponsavel, codo_cnpj, codo_ie, codo_bairro, codo_complemento);
                
                lista.add(clContratado);
            }

            return lista;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public void excluir(int codo_cod) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(codo_cod == 0)
        {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM contratado WHERE CODO_COD = ?");
            ps.setInt(1, codo_cod);
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
}
